// var id='GLOBAL';
// var obj={
//   id:'OBJ',
//   a:function(){
//     console.log(this.id);
//   },
//   b:()=>{
//     console.log(this.id);
//   }
// }

// obj.a();//OBJ
// obj.b();//undefined
// new obj.a();//undefined
// new obj.b();//TypeError: obj.b is not a constructor


const obj={
  getArrow(){
    return ()=>{
      console.log(this===obj);
    }
  }
}

obj.getArrow()()//true

//扩展运算符  浅拷贝   相当于Object.assign({},bar) 将源对象的所有可枚举属性，复制到目标对象，如果目标对象与源对象有同名属性，则后面的属性会覆盖前面的属性
//扩展运算符用于取出参数对象中的所有可遍历的属性，拷贝到当前对象中 
// 扩展运算符是最后一位  将字符串转为真正的数组，任何Iterator接口的对象，都可以用扩展运算符转为真正的数组
let bar = {a:1,b:2,c:{a:1}}
let baz={...bar}
console.log(baz);
baz.a=2
baz.c.a=3
console.log(baz);
console.log(bar);


const bb=Object.create({
  name:'含笑'
})

bb.name='惠妹'
console.log(bb.name);


const map=new Map([
  ['foo',1],
  ['bar',2]
])
//size  set(key ,value) get(key) has(key) delete(key) clear()
console.log(map.keys());
console.log(map.values());


for (let items of map){
  console.log(items);// [ 'foo', 1 ] [ 'bar', 2 ]
}


for (let items of map.entries()){
  console.log(items);// [ 'foo', 1 ] [ 'bar', 2 ]
}
map.forEach((value,key,map)=>{
  console.log(key,value);
})